package busterminalweb.authorization;

import busterminal.entity.AbstractEntityImplementation;
import busterminalweb.authorization.service.Role;

/**
 * Пользователь
 */
public class User extends AbstractEntityImplementation {

    /**
     * Логин пользователя
     */
    private String login;
    /**
     * Пароль пользователя
     */
    private String password;
    /**
     * Фамилия, имя, отчество пользователя
     */
    private String name;
    /**
     * Роль пользоателя
     */
    private Role role;

    /**
     * Конструктор по умолчанию
     */
    public User() {
    }

    /**
     * Конструктор для сущности пользователь
     * @param login логин пользователя
     * @param password пароль пользователя
     * @param name фамилия, имя, отчество пользователя
     * @param role роль пользоателя, определяемое константой из {@link Role}
     */
    public User(String login, String password, String name, Role role) {
        this.login = login;
        this.password = password;
        this.name = name;
        this.role = role;
    }

    /**
     * Получить логин пользователя
     * @return логин пользователя
     */
    public String getLogin() {
        return login;
    }

    /**
     * Установить логин пользователя
     * @param login логин пользователя
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * Получить фамилию, имя, отчество пользователя
     * @return фамилия, имя, отчество пользователя
     */
    public String getName() {
        return name;
    }

    /**
     * Установить фамилию, имя, отчество пользователя
     * @param name фамилия, имя, отчество пользователя
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Получить пароль пользователя
     * @return пароль пользователя
     */
    public String getPassword() {
        return password;
    }

    /**
     * Установить пароль пользователя
     * @param password пароль пользователя
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * Получить роль пользоателя
     * @return роль пользоателя
     */
    public Role getRole() {
        return role;
    }

    /**
     * Установить роль пользоателя
     * @param role роль пользоателя
     */
    public void setRole(Role role) {
        this.role = role;
    }

    /**
     * Создать пользователя
     * @param login логин пользователя
     * @param password пароль пользователя
     * @param name фамилия, имя, отчество пользователя
     * @param role роль пользоателя, определяемое константой из {@link Role}
     * @return пользователь
     */
    public static User createUser(String login, String password, String name, String role) {
        User user = new User();
        user.setLogin(login);
        user.setPassword(password);
        user.setName(name);
        try {
            user.setRole(Role.valueOf(role.toUpperCase()));
        } catch (IllegalArgumentException e) {
            user.setRole(Role.PASSENGER);
        }

        return user;
    }
}